// 描述

// 小童打算报名一个猜数游戏，游戏规则是这样的：给定一个不超过10亿的数字，如果能在20次及以内猜中数字，就可以得到游戏奖章，超过20次则没有奖励。
// 请你编写程序判断小童能否得到游戏奖章，得到输出“ YES”,否则输出“NO” 。（ 中间值 mid = (最大值+最小值)/2 ）

// 输入描述

// 输入一个整数n，表示游戏给定的数字。(1≤n≤1000000000)

// 输出描述

// 一个单词。 “ YES” 表示小童得到游戏奖章。 “NO”表示没有得到游戏奖章。

// 样例输入 1 

// 500000000
// 样例输出 1 

// YES
// 样例输入 2 

// 110000000
// 样例输出 2 

// NO
#include <iostream>
using namespace std;

int main() {
    int n;
    // 读取游戏给定的数字
    cin >> n;

    int left = 1, right = 1000000000;
    int guessCount = 0;

    while (left <= right) {
        // 计算中间值作为猜测数字
        int mid = left + (right - left) / 2;
        // 猜测次数加 1
        guessCount++;
        if (mid == n) {
            // 猜中数字，跳出循环
            break;
        } else if (mid < n) {
            // 猜的数字小了，更新左边界
            left = mid + 1;
        } else {
            // 猜的数字大了，更新右边界
            right = mid - 1;
        }
    }

    if (guessCount <= 20) {
        // 猜测次数在 20 次及以内，输出 YES
        cout << "YES" << endl;
    } else {
        // 猜测次数超过 20 次，输出 NO
        cout << "NO" << endl;
    }

    return 0;
}
